启动引导程序 grub

前言

Boot Loader 是电脑启动时运行的第一个程序,它负责装载内核并将控制权转交。内核再初始化操作系统的其它部分。官方所称的 GRUB 是软件的第二版,即 GRUB2

GRUB 命名约定

GRUB 对于硬盘和分区自有一套命名规则(hdN,M),其中 N 是硬盘数,M 是分区号。硬盘数 N 从 0 开始计数,分区数需要区别对待——主分区从 1 开始计数而扩展分区从 5 开始计数。

磁盘编号

Grub在表示方式上并不区分IDE硬盘、SATA硬盘和SCSI硬盘等,所有硬盘会被识别为hd#,”#”是从0开始的硬盘编号,而软盘被类似地识别为fd#

分区编号

通常情况下,在使用MBR格式的分区表的电脑中,最多有四个主分区,其中一个可以是扩展分区,内含若干逻辑分区。装有Windows的硬盘中,通常C盘是主分区,其它盘是扩展分区下的逻辑分区。

Grub 2的分区编号从1开始。如(hd0)的第一个主分区(hd0, msdos1),而第一个逻辑分区从(hd0, msdos5)开始计数。

为什么这里扩展分区从 5 计数,可以查看 mbr 的相关知识。早期版本的 GRUB 是什么计算磁盘和分区数,我忘记了,不过,大家就记住新的就好啦。

Grub配置文件

GRUB 会将一些数据写入硬盘的第一个物理扇区。这一部分不属于任何一个操作系统,在启动时,该部分数据激活,然后寻找 Grub 的模块,Grub 模块的默认位置为 /boot/grub/

雷军
既然不属于任何一个操作系统,为何操作系统有权限修改grub配置文件?
1
cat /etc/default/grub
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=15
GRUB_RECORDFAIL_TIMEOUT=60
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="nomodeset net.ifnames=0"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

Grub加密与字符界面分辨率调整

重启后进入grub rescue

什么原因?

怎样解决?

参考